class_name WitheredWoodWardEffect
extends Resource

# 枯木护盾效果 - 贷款能量版本
# 功能：立即获得伤害免疫，消耗额外能量（贷款）
# 
# 贷款能量机制：
# - 卡牌正常消耗当前能量
# - 额外消耗max_mana点能量作为"贷款"
# - 贷款记录在new_loan_mana中，下回合开始时影响可用能量

# 可配置参数
@export var loan_amount: int = 1  # 贷款的能量数量（已废弃，现在使用max_mana）
@export var immunity_duration: int = 0  # 免疫持续时间（回合数，0表示到回合结束）

func execute(targets: Array[Node]) -> void:
	print("🌳 WitheredWoodWardEffect.execute() 被调用（贷款能量版本）")
	
	for target in targets:
		if not target or not is_instance_valid(target):
			continue
		if target is Player:
			_apply_withered_wood_ward(target)
		else:
			print("❌ 目标不是Player类型: %s" % target.get_class())

func _apply_withered_wood_ward(player: Player) -> void:
	print("🌳 枯木护盾效果触发，玩家: %s" % player.name)
	
	# 1. 应用立即伤害免疫效果
	_apply_damage_immunity(player)
	
	# 2. 执行贷款消耗（使用max_mana）
	_apply_loan_cost(player)

func _apply_damage_immunity(player: Player) -> void:
	print("🛡️ 应用伤害免疫效果")
	
	# 获取伤害修改器
	var dmg_taken_modifier: Modifier = player.modifier_handler.get_modifier(Modifier.Type.DMG_TAKEN)
	if dmg_taken_modifier:
		# 创建伤害免疫修改器
		var immunity_value := ModifierValue.create_new_modifier(
			"withered_wood_overspend_immunity",
			ModifierValue.Type.FLAT
		)
		immunity_value.flat_value = -999  # 大幅减少伤害，实现免疫效果
		
		# 添加修改器
		dmg_taken_modifier.add_new_value(immunity_value)
		print("🛡️ 已为 %s 添加伤害免疫效果" % player.name)
		
		# 如果免疫持续时间为0，则在回合结束时移除
		if immunity_duration == 0:
			# 连接回合结束信号来自动移除免疫效果
			_schedule_immunity_removal(player, dmg_taken_modifier)
	else:
		print("❌ 无法获取伤害修改器")

func _apply_loan_cost(player: Player) -> void:
	# 获取玩家的最大体力值作为贷款消耗
	var max_mana = player.stats.max_mana if player.stats else 10
	print("💸 执行贷款消耗: 消耗最大体力值 %d 点能量" % max_mana)
	
	# 记录旧的贷款值
	var old_new_loan = player.stats.new_loan_mana
	player.stats.new_loan_mana += max_mana
	
	# 记录到计数器（用于其他效果检查）
	if player.stats.stats_tracker:
		var counter = player.stats.stats_tracker.get_turn_counter()
		if counter:
			counter.add_to_counter(TurnCounter.CounterType.MANA_OVERSPENT, max_mana)
	
	print("📊 贷款累积: new_loan_mana %d → %d (+%d)" % [old_new_loan, player.stats.new_loan_mana, max_mana])
	print("✅ 贷款记录成功，下回合可用能量将减少 %d 点" % max_mana)

func _schedule_immunity_removal(player: Player, modifier: Modifier) -> void:
	# 移除免疫效果应该在整个回合结束时，而不是玩家回合结束时
	# 因为敌人还需要在同一回合内行动
	print("📅 已安排在敌人回合结束时移除免疫效果")
	
	# 监听敌人回合结束信号，确保免疫效果持续到整个回合结束
	if Events:
		# 创建一个回调函数来移除免疫效果
		var remove_immunity = func():
			modifier.remove_value("withered_wood_overspend_immunity")
			print("🔄 枯木护盾免疫效果已在敌人回合结束时移除")
		
		# 连接敌人回合结束信号，使用CONNECT_ONE_SHOT自动断开连接
		Events.enemy_turn_ended.connect(remove_immunity, CONNECT_ONE_SHOT) 
